JS-预解析

6次阅读
没有评论

共计 930 个字符,预计需要花费 3 分钟才能阅读完成。

预解析

JavaScript 代码是由浏览器中的 JavaScript 解释器来执行的,JavaScript 解释器在运行 JavaScript 代码的时候分为两步:预解析和代码执行

js引擎会把js里面所有的 var 还有 function 提升到当前作用域的最前面,然后按照代码书写的顺序自上而下执行

let 不会预解析

变量预解析(变量提升)

变量提升,就是把所有的变量声明提升到当前作用域最前面,不提升赋值操作

函数预解析(函数提升)

函数提升,就是把所有的函数声明提升到当前作用域的最前面,不调用函数

预解析

// var b = function() { } // 这种是函数表达式**不是函数声明**
// function c() { }       // 这种是函数声明



function fn(a, c) {
  console.log(a)         // function a() { }
  var a = 123
  console.log(a)         // 123
  console.log(c)         // function c() { }
  function a() { }
  if(false) {
    var d = 678
  }
  console.log(d)         // undefined
  console.log(b)         // undefined
  var b = function() { }
  console.log(b)         // function () { }
  function c() { }
  console.log(c)         // function c() { }
}
fn(1, 2)

/*
  预解析
  作用域(全局作用域和函数作用域)的创建阶段 预解析的阶段
  预编译的时候做了那些事情
    js 的变量对象,在函数作用域的创建阶段也叫做 AO 对象,访问不到供 js 引擎自己去访问的;AO 对象在函数作用域的创建阶段做了哪些事情
      1. 创建了 AO 对象
      2. 找形参和变量的声明
      3. 实参和形参相统一 
      4. 找函数声明,如果函数声明的名称和变量声明名称一样的话,会覆盖变量的声明

  上面代码的 AO 对象
  AO: {
    a: undefined 1 function a() { }
    c: undefined 2 function c() { }
    d: undefined 1
    b: undefined 1
  }

  js 解释执行 逐行执行输出
  function a() { }
  123
  function c() { }
  undefined
  undefined
  function () { }
  function c() { }
*/

正文完
 0
qiaofugui.cn
版权声明:本站原创文章,由 qiaofugui.cn 于2024-05-20发表,共计930字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码